第 2 步 - 应用模具

在这一步,使用渲染通道和Stencil 节点仅显示ContactsList 节点的选定部分。

使用渲染通道首先将 Stencil节点的形状写入模具缓冲区。然后使用模具测试,仅将Stencil 节点覆盖的ContactsList 节点部分以及您写入到模具缓冲区的部分绘制到屏幕。

模具缓冲区是当前帧缓冲区中的图像,您可以用当前帧缓冲区来控制 Kanzi 渲染哪些像素。您根据模具缓冲区的值使用渲染通道放弃或渲染内容中的特定像素。通过这种方式,您可以将渲染区域限制为您用作模具的节点形状。节点形状用作模具中的间隙,确定内容中哪些部分是可见的。

要应用模具:

  1. 素材库 (Library) > 渲染 (Rendering)按下 Alt 并右键点击渲染通道 (Render Passes),选择组渲染通道 (Group Render Pass) 并命名为 Stencil Render Pass
    使用组渲染通道 (Group Render Pass) 收集应用模具到内容的渲染通道。
  2. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) > Stencil Render Pass 中创建 清除渲染通道 (Clear Render Pass),在属性 (Properties) 中添加清除模具 (Clear Stencil) 属性,将其设为 0。
    这样可以在模具缓冲区中将 0 值写入所有像素,从而清除模具缓冲区。
    您将在这个过程的后续步骤中使用模具缓冲区将渲染区域限制为Stencil 节点的形状。
  3. 工程 (Project) 中选择RootPage > 2D 视口 (Viewport 2D) > 场景 (Scene) 节点,并在属性 (Properties) 中将渲染通道 (Render Pass) 属性设为Stencil Render Pass
    通过这种方式,您可以设置 Kanzi 来使用Stencil Render Pass 渲染场景 (Scene) 节点。
    Stencil Render Pass 还没有在屏幕上绘制,因此在预览 (Preview) 窗口中 2D 视口 (Viewport 2D) 节点为空。
  4. 向模具缓冲区写入Stencil 节点的形状:
    1. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) > Stencil Render Pass 中创建绘图对象渲染通道 (Draw Objects Render Pass),将其命名为 Draw Stencil,在属性 (Properties) 中添加对象源 (Object Source) 属性,并将其设置为Stencil Filter 标签过滤器 (Tag Filter)
      使用对象源 (Object Source) 属性将要渲染的节点传递至绘图对象渲染通道 (Draw Objects Render Pass)
      在这里设置 Stencil Render Pass 只渲染 Stencil 节点。

    2. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) > Stencil Render Pass 中创建管道状态渲染通道 (Pipeline State Render Pass),命名为Stencil Write,并将Draw Stencil 渲染通道拖到Stencil Write 渲染通道。
      使用渲染通道写入至模具缓冲区。
    3. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) > Stencil Render Pass 中选择Stencil Write,在属性 (Properties) 中添加并设置:
      • 颜色写入模式 (Color Write Mode)无 (None)
        通过这种方式,让Stencil 节点不可见。
      • 深度写入已启用 (Depth Write Enabled) 为禁用
        这样会阻止 Draw Stencil 渲染通道将 Stencil 节点写入深度缓冲区。
      • 模具测试函数 (Stencil Test Function)始终 (Always)
        您使用此属性控制模具测试以何种方式将模具参考值与模具缓冲区中的值进行比较。将属性设为始终 (Always),以始终通过测试。
        通过这种方式,使Draw Stencil 渲染通道将Stencil 节点写入模具缓冲区。
      • 模具函数参考值 (Stencil Function Reference Value) 为 1
        通过将模具函数参考值 (Stencil Function Reference Value) 设为 1,使Draw Stencil 渲染通道将值 1 写入模具缓冲区。
      • 模具通道深度通道操作 (Stencil Pass Depth Pass Operation)替换 (Replace)
        通过这种方式,使用模具函数参考值 (Stencil Function Reference Value) 属性的值替换模具缓冲区中的当前值。
      • 模具写入已启用 (Stencil Write Enabled) 为启用
        通过这种方式,将值为 1 的Stencil 节点形状写入模具缓冲区,将值 0 写入其他区域。
  5. 渲染联系人列表:
    1. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) > Stencil Render Pass 中创建绘图对象渲染通道 (Draw Objects Render Pass),将其命名为 Draw ContactsList,在属性 (Properties) 中添加对象源 (Object Source) 属性,并将其设置为Content Filter标签过滤器 (Tag Filter)
      Kanzi 现在渲染ContactsList方向光 (Directional Light) 节点。但是,Kanzi 不渲染Stencil 节点,因为Content Filter 排除了带有Stencil 标签的节点。

    2. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) > Stencil Render Pass 中创建管道状态渲染通道 (Pipeline State Render Pass),命名为Stencil Test,并将Draw ContactsList 渲染通道拖到Stencil Test 渲染通道。
      在下一步骤中,使用Stencil Test 渲染通道将Draw ContactsList 渲染通道的渲染限制为您在这个过程的前面步骤中写入模具缓冲区的区域。
    3. 素材库 (Library) > 渲染 (Rendering) > 渲染通道 (Render Passes) > Stencil Render Pass 中选择Stencil Test,在属性 (Properties) 中添加并设置:
      • 模具测试函数 (Stencil Test Function)等于 (Equal)
      • 模具函数参考值 (Stencil Function Reference Value) 为 1
      通过这种方式,您将ContactsList 节点的渲染区域限制为模具值为 1 的像素,因此渲染通道仅绘制Stencil 节点与ContactsList 节点重叠的部分。

接下来该做什么?

在本教程中,您学习了如何将模具应用到 3D 内容,使 Kanzi 仅渲染内容的选定区域。现在您可以:

另请参阅

要详细了解有关 Kanzi 中渲染通道的信息,请参阅渲染